package DesignPatern.A05_建造者模式.QXB.A02中级模式;

import java.util.ArrayList;

/**
 * @Author: Du
 * @Date: 2021/7/21 10:58
 * <p>
 * 模板方法模式
 * 存在的问题是，如果我现在需要宝马模型和奔驰的模型不一样，这时我们就需要再写一个BMW的实现类，重复劳动
 * 我们能不能将构造的部分抽象为一个公共的部分呢？
 * <p>
 * 如下代码就可以解决这个问题
 * 这样一个需求，即可以生产奔驰，同在生产宝马，不用再写重复代码
 * <p>
 * 但是上述的List，我们还是不知道客户到底需要什么样的顺序
 * 所以还可以再加一个导演类，负责指挥各个事件的先后顺序，需要某种顺序的汽车，可以立马生产
 * <p>
 * 建造者模式 和 工厂模式的区别
 * 1 建造者模式更加注重细节的建造，比如该例子中可以制定细节制造的顺序
 * 2 工厂模式则更加注重整体的建造
 */
public class A01_Main
{
    public static void main(String[] args)
    {
        ArrayList<String> sequence = new ArrayList<>();
        sequence.add("start");
        sequence.add("alarm");
        sequence.add("stop");
        
        BenzBuilder benzBuilder = new BenzBuilder();
        benzBuilder.setSequence(sequence);
        BenzModel benzModel = (BenzModel) benzBuilder.getCarModel();
        benzModel.run();
        
        BMWBuilder bmwBuilder = new BMWBuilder();
        bmwBuilder.setSequence(sequence);
        BMWModel bmwModel = (BMWModel) bmwBuilder.getCarModel();
        bmwModel.run();
    }
    
    
}
